/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Persistencia;

import Motor.ClaseUtilitaria;
import Motor.Cliente;
import Motor.TarjetaDeAfiliado;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.ParseException;
import java.util.Iterator;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;

//import java.util.ArrayList;
import org.jdom.Document;
import org.jdom.JDOMException;
import org.jdom.output.XMLOutputter;


//import proyecto.*;
/**
 *
 * @author yindri
 */
public class DAOTarjetaDeAfiliadoXML
{
    private Element root;
    /** variable que contiene la localizacion del archivo xml*/

	private String fileLocation = "src//archivo//TarjetasAfiliados.xml";

//    /**
//     * constructor por defecto que inicia los valores para trabajar con el documento
//     * xml
//     */
   public DAOTarjetaDeAfiliadoXML() throws IOException
   {
        try
		{
            SAXBuilder builder = new SAXBuilder(false);
            Document doc = null;
            doc = builder.build(fileLocation);
            root = doc.getRootElement();
        } catch (JDOMException ex) {
            System.out.println("No se pudo iniciar la operacion por: " + ex.getMessage());
        } catch (IOException ex) {
            System.out.println("No se pudo iniciar la operacion por: " + ex.getMessage());
        }
    }

/*Aqui lleno todo el contexto que le voy a insertar al archivo, es decir
    el nodo principal que es Cliente con los atributos que le corresponden,
    los cuales seria cedula,nombre y apellido,etc*/

    public Element TarjetaDeAfiliadotoXmlElement(TarjetaDeAfiliado tarjetaDeAfiliado)
	{

        Element raizTarjetaDeAfiliado = new Element("tarjetaDeAfiliado");

		Element idTarjeta = new Element("idTarjeta");
        idTarjeta.setText(Integer.toString(tarjetaDeAfiliado.getIdTarjeta()));
		Element status = new Element("status");
        status.setText(tarjetaDeAfiliado.getStatus());
		Element puntosAfiliados = new Element("puntosAfiliados");
        puntosAfiliados.setText(Integer.toString(tarjetaDeAfiliado.getPuntosAfiliados()));

//			Element fechaIngreso = new Element("fechaIngreso");
//			try {
//				fechaIngreso.setText(ClaseUtilitaria.convertiDateString(cliente.getFechaIngreso()));
//			} catch (ParseException ex1) {
//			}
		Element fechaDeEmision = new Element ("fechaDeEmision");
		try {
			fechaDeEmision.setText(ClaseUtilitaria.convertiDateString(tarjetaDeAfiliado.getFechaDeEmision()));
		} catch (ParseException ex) {
		}
		Element fechaDeVencimiento = new Element ("fechaDeVencimiento");
		try {
			fechaDeVencimiento.setText(ClaseUtilitaria.convertiDateString(tarjetaDeAfiliado.getFechaDeVencimiento()));
		} catch (ParseException ex) {
		}

		raizTarjetaDeAfiliado.addContent(idTarjeta);
		raizTarjetaDeAfiliado.addContent(status);
		raizTarjetaDeAfiliado.addContent(puntosAfiliados);
		raizTarjetaDeAfiliado.addContent(fechaDeEmision);
		raizTarjetaDeAfiliado.addContent(fechaDeVencimiento);

		return raizTarjetaDeAfiliado;
	}

   /*Método que retorna un Cliente. A este metodo se le manda un Element y con
    sus datos se hará los pasos requeridos para crear el Estudiante*/

	public TarjetaDeAfiliado tarjetaDeAfiliadoToObject(Element element) throws ParseException
	{
		
		TarjetaDeAfiliado nuevaTarjetaDeAfiliado = new TarjetaDeAfiliado();
		nuevaTarjetaDeAfiliado.setIdTarjeta(Integer.parseInt(element.getChildText("idTarjeta")));
		nuevaTarjetaDeAfiliado.setStatus(element.getChildText("status"));
		nuevaTarjetaDeAfiliado.setPuntosAfiliados(Integer.parseInt(element.getChildText("puntosAfiliados")));
		nuevaTarjetaDeAfiliado.setFechaDeEmision(ClaseUtilitaria.convertirStringaDate(element.getChildText("fechaDeIngreso")));
		nuevaTarjetaDeAfiliado.setFechaDeVencimiento(ClaseUtilitaria.convertirStringaDate(element.getChildText("fechaDeVencimiento")));
	
		return nuevaTarjetaDeAfiliado;
	} 

//
//        DAOCitaXML tempCita = new DAOCitaXML();
//
//        for (Object it : element.getChildren("cita")) {
//            Element xmlElem = (Element) it;
//            try {
//                nuevoPaciente.agregarCitaMedica(tempCita.CitaToObject(xmlElem));
//            } catch (ParseException ex) {
//                System.out.println(ex.getMessage());
//            }
//        }
//
//        DAOEntradaSalidaXML entSal = new DAOEntradaSalidaXML();
//
//        for (Object it : element.getChildren("entradasalida")) {
//            Element xmlElem = (Element) it;
//            try {
//                nuevoPaciente.nuevoRegistroES(entSal.EntradaSalidaToObject(xmlElem));
//            } catch (ParseException ex) {
//                System.out.println(ex.getMessage());
//            }
//        }
//        if (element.getChild("historia") != null){
//			if(element.getChild("historia").getText().compareTo("")!=0)
//			{
//				DAOHistoriaXML historia = new DAOHistoriaXML();
//				nuevoPaciente.setHistorialPaciente(historia.HistoriaToObject(element.getChild("historia")));
//
//			}
//	    }
//
//        if (element.getChild("plan") != null){
//            DAOPlanXML plan = new DAOPlanXML();
//            nuevoPaciente.setPlanPaciente(plan.PlanToObject(element.getChild("plan")));
//        }
//
//        return nuevoPaciente;
//    }
//

   /* Operacion para guardar en el documento Xml los cambios efectuados
    * @return true si se cumplio la operacion con exito, false en caso contrario*/


    private boolean updateDocument()
	{
        try {
            XMLOutputter out = new XMLOutputter(org.jdom.output.Format.getPrettyFormat());
            FileOutputStream file = new FileOutputStream(fileLocation);

           out.output(root, file);
            file.flush();
            file.close();
            return true;
        } catch (Exception e) {
            System.out.println("error: " + e.getMessage());
            return false;
        }
    }

   /* Operacion que busca un elemento que cumpla con una condicion en el id del xml
     * @param raiz = raiz del documento xml
     * @param dato = elemento a buscar.
     * @return retorna el elemento si existe con la condicion, en caso contrario retorna null */


    public static Element buscar(List raiz, String dato)
	{
        Iterator i = raiz.iterator();
        while (i.hasNext()) {
            Element e = (Element) i.next();
            if (dato.equals(e.getChild("cedula").getText()))
			{
                return e;
            }
        }
        return null;
    }
//
//    public static Element buscar(List raiz, String usuario, String contrasena) {
//        Iterator i = raiz.iterator();
//        while (i.hasNext()) {
//            Element e = (Element) i.next();
//            if ((usuario.equals(e.getChild("usuario").getText())) &&
//               (contrasena.equals(e.getChild("contrasena").getText()))){
//                return e;
//            }
//        }
//        return null;
//    }


//   // @return valor boleano con la condicion de exito
//    public boolean agregarPaciente(Paciente nPaciente) {
//        boolean resultado = false;
//        root.addContent(PacientetoXmlElement((Paciente) nPaciente));
//        resultado = updateDocument();
//        return resultado;
//    }
//
//    //TODO Por adaptar
//
//    /* @param cedula numero de cedula del Estudiante a buscar
//    * @return objeto Estudiante con sus datos segun busqueda*/
//    public Paciente buscarPaciente(Integer cedula) {
//        Element aux = new Element("paciente");
//        List Pacientes = this.root.getChildren("paciente");
//        while (aux != null) {
//            aux = DAOPacienteXML.buscar(Pacientes, Integer.toString(cedula));
//            if (aux != null) {
//                try {
//                    return PacienteToObject(aux);
//                } catch (ParseException ex) {
//                    System.out.println(ex.getMessage());
//                }
//            }
//        }
//        return null;
//    }
//
//    public Paciente buscarPaciente(String usuario, String contrasena) {
//        Element aux = new Element("paciente");
//        List Pacientes = this.root.getChildren("paciente");
//        while (aux != null) {
//            aux = DAOPacienteXML.buscar(Pacientes, usuario, contrasena);
//            if (aux != null) {
//                try {
//                    return PacienteToObject(aux);
//                } catch (ParseException ex) {
//                    System.out.println(ex.getMessage());
//                }
//            }
//        }
//        return null;
//    }
//
//    //TODO Por adaptar
//
//    /* @param Estudiante objeto Estudiante a actualizar
//     * @return valor boleano con la condicion de exito */
//    public boolean actualizarPaciente(Paciente nPaciente) {
//        boolean resultado = false;
//        Element aux = new Element("paciente");
//        List Pacientes = this.root.getChildren("paciente");
//        while (aux != null) {
//            aux = DAOPacienteXML.buscar(Pacientes, Integer.toString(nPaciente.getCedula()));
//            if (aux != null) {
//                Pacientes.remove(aux);
//                resultado = updateDocument();
//            }
//        }
//        agregarPaciente(nPaciente);
//        return resultado;
//    }
//
//    //TODO Por adaptar
//
//    /* @param cedula cedula del Estudiante a borrar
//     * @return valor boleano con la condicion de exito  */
//    public boolean borrarPaciente(Integer cedula) {
//        boolean resultado = false;
//        Element aux = new Element("paciente");
//        List Pacientes = this.root.getChildren("paciente");
//        while (aux != null) {
//            aux = DAOPacienteXML.buscar(Pacientes, Integer.toString(cedula));
//            if (aux != null) {
//                Pacientes.remove(aux);
//                resultado = updateDocument();
//            }
//        }
//        return resultado;
//    }
//
//    //TODO Por adaptar
//
//    /* Para obtener todos los Estudiantes
//     * @return ArrayList con todos los objetos Estudiante  */
//    public ArrayList<Paciente> todasLosPacientes() {
//        ArrayList<Paciente> resultado = new ArrayList<Paciente>();
//        for (Object it : root.getChildren()) {
//            Element xmlElem = (Element) it;
//            try {
//                resultado.add(PacienteToObject(xmlElem));
//            } catch (ParseException ex) {
//                System.out.println(ex.getMessage());
//            }
//        }
//        return resultado;
//    }
}




